package cn.song.freight.domain.entity;

import com.baomidou.mybatisplus.annotation.TableId;
import com.baomidou.mybatisplus.annotation.TableName;
import com.baomidou.mybatisplus.annotation.TableField;
import com.baomidou.mybatisplus.annotation.IdType;
import com.fasterxml.jackson.annotation.JsonFormat;
import io.swagger.annotations.ApiModel;
import io.swagger.annotations.ApiModelProperty;
import lombok.AllArgsConstructor;
import lombok.Data;
import lombok.NoArgsConstructor;
import org.springframework.format.annotation.DateTimeFormat;

/**
 * 策略分配数据对象 (DO)
 *
 * 该实体类代表运费策略分配关系的数据模型。
 * 策略分配记录了运费策略与仓库、物流公司组合的关联关系，
 * 允许为不同的仓库和物流公司配置特定的运费计算策略。
 *
 * 通过策略分配表，系统可以实现：
 * 1. 为不同仓库配置差异化的运费策略
 * 2. 为不同物流公司设置专属的计费规则
 * 3. 支持策略的启用/禁用状态管理
 * 4. 记录策略分配的操作历史和时间戳
 *
 * 数据库表名：strategy_assignment
 *
 * @author System
 * @since 1.0.0
 */
@Data
@NoArgsConstructor
@AllArgsConstructor
@TableName("strategy_assignment")
@ApiModel(description = "策略分配数据对象")
public class StrategyAssignmentDO {

    /**
     * 主键ID
     */
    @TableId(type = IdType.AUTO)
    @ApiModelProperty(value = "主键ID")
    private Long id;

    /**
     * 仓库编码（如：WH001）
     */
    @TableField("warehouse_code")
    @ApiModelProperty(value = "仓库编码（如：WH001）")
    private String warehouseCode;

    /**
     * 物流公司编码（如：SF、YTO）
     */
    @TableField("logistics_company_code")
    @ApiModelProperty(value = "物流公司编码（如：SF、YTO）")
    private String logisticsCompanyCode;

    /**
     * 外键：使用的运费策略ID（freight_strategy.id）
     */
    @TableField("strategy_id")
    @ApiModelProperty(value = "外键：使用的运费策略ID（freight_strategy.id）")
    private Long strategyId;

    /**
     * 状态：1-启用，2-禁用
     */
    @TableField("status")
    @ApiModelProperty(value = "状态：1-启用，2-禁用")
    private Integer status;

    /**
     * 创建时间
     */
    @TableField("create_time")
    @ApiModelProperty(value = "创建时间")
    @JsonFormat(pattern = "yyyy-MM-dd HH:mm:ss", timezone = "GMT+8")
    @DateTimeFormat(pattern = "yyyy-MM-dd HH:mm:ss")
    private java.util.Date createTime;

    /**
     * 最后更新时间（由应用层设置）
     */
    @TableField("update_time")
    @ApiModelProperty(value = "最后更新时间）")
    @JsonFormat(pattern = "yyyy-MM-dd HH:mm:ss", timezone = "GMT+8")
    @DateTimeFormat(pattern = "yyyy-MM-dd HH:mm:ss")
    private java.util.Date updateTime;

    /**
     * 操作人（如：admin, lisi）
     */
    @TableField("operator")
    @ApiModelProperty(value = "操作人（如：admin, lisi）")
    private String operator;
}
